package com.fastCms.business.mall.manage;


import com.fastCms.business.frame.exception.BusinessException;
import com.fastCms.business.frame.pojo.PageParam;
import com.fastCms.business.frame.pojo.po.IdListPO;
import com.fastCms.business.frame.pojo.po.StatusPO;
import com.fastCms.business.frame.response.ApiResponse;
import com.fastCms.business.mall.pojo.po.*;
import com.fastCms.business.mall.pojo.vo.*;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * 杭州人参大健康管理有限公司 版权所有 Copyright 2019<br>
 *
 * @Description: <br>
 * @Project: healthPro <br>
 * @CreateDate: Created in 2019年4月9日 下午6:16:41 <br>
 * @Author: < a href="jiahui.zhao@healthpro.vip">jiahui.zhao</ a>
 */
public interface ProductManageService {

    /**
     * 新增或编辑商品
     *
     * @param editProductInfoPO
     * @return
     * @throws BusinessException
     */
    ApiResponse<String> saveOrUpdateProduct(ProductInfoEditPO editProductInfoPO) throws BusinessException;

    /**
     * 分页展示商品
     *
     * @param pageParam
     * @return
     */
    ApiResponse<ProductPageInfoVO> showPage(PageParam<ProductQueryPO> pageParam);

    /**
     * 删除商品
     *
     * @param productId
     * @return
     */
    ApiResponse<Boolean> deleteProduct(String productId);

    /**
     * 商品上下架
     *
     * @param statusPOS
     * @return
     */
    ApiResponse<Boolean> changeProductStoreStatus(List<StatusPO> statusPOS);

    /**
     * 修改商品库存
     *
     * @param productStockPO
     * @return
     */
    ApiResponse<Boolean> changeProductRemainStock(ProductStockPO productStockPO);

    /**
     * 商品信息
     *
     * @param productId
     * @return
     */
    ApiResponse<ProductInfoShowVO> showProductInfo(String productId);

    /**
     * 商品sku信息(包含规格)
     *
     * @param productId
     * @return
     */
    ApiResponse<ProductSkuInfoShowVO> showProductSkuInfo(String productId);

    /**
     * 商品自定义上架时间到时上架
     *
     * @param productId
     * @return
     */
    ApiResponse<Boolean> productOnSaleInTime(String productId);

    /**
     * 商品选择器
     *
     * @param pageParam
     * @return
     */
    ApiResponse<PageInfo<ProductSelectorVO>> productSelector(PageParam<ProductQuerySelectorPO> pageParam);

    /**
     * 根据商品主键列表查询商品信息
     *
     * @param idListPO
     * @return
     */
    ApiResponse<List<ProductVO>> showProductList(IdListPO idListPO);

    /**
     * 根据商品简要信息
     *
     * @param productId
     * @return
     */
    ApiResponse<ProductVO> showProductBaseInfo(String productId);

    /**
     * 批量修改商品sku库存
     *
     * @param productSkuStockPO
     * @return
     */
    ApiResponse<Boolean> changeProductSkuStocks(ProductSkuStockPO productSkuStockPO);

    /**
     * app分页展示商品列表
     *
     * @param pageParam
     * @return
     */
    ApiResponse<PageInfo<AppProductListVO>> showProducts(PageParam<AppQueryProductPO> pageParam);

    /**
     * app展示商品详情
     *
     * @param productId
     * @return
     */
    ApiResponse<AppProductDetailVO> showProductDetail(String productId);


    /**
     * APP-根据商品主键列表查询商品信息
     *
     * @param idListPO
     * @return
     */
    ApiResponse<List<AppProductListVO>> showAppProductList(IdListPO idListPO);


    /**
     * APP-根据产品生成小程序二维码
     *
     * @param param
     * @return
     */
    public ApiResponse<String> createAppMiniCodeImg(AppProductMiniCodeImgPO param);


    /**
     * 新增或编辑商品其它相关信息
     *
     * @param productOtherInfoPO
     * @return
     */
    ApiResponse<Boolean> saveOrUpdateProductOtherInfo(ProductOtherInfoPO productOtherInfoPO);

    /**
     * 展示商品其它相关信息
     *
     * @param productId
     * @return
     */
    ApiResponse<ProductOtherInfoVO> showProductOtherInfo(String productId);

    /**
     * 预约信息
     *
     * @param productId
     * @return
     */
    ApiResponse<List<ProductReserveTimeVO>> showReserveTimes(String productId);
}
